Template Method Pattern
Template ဆိုတာကတော့ ကျွန်တော်တို့တွေ ကြားနေကြပါ။ ပုံမှန် အားဖြင့် အရန်သင့်ရှိပြီးသားထဲကမှ လိုအပ်သည့် အပိုင်းလေးကိုပဲ ပြင်ပြီး သုံးတာပါ။ Template Method Pattern ကလည်း အဲလိုခပ်ဆင်ဆင်ပါပဲ။ Template Method Pattern က Behavioral Patterns တစ်ခုပါ။
အိမ်တစ်လုံး ဆောက်သည့် Class ကို ကြည့်ရအောင်။
အိမ်ကို တစ်ဆောက်မှာကတော့ House Builder ကနေ buildHouse function က ပဲ ဆောက်ပါလိမ့်မယ်။ ဒါပေမယ့် ဆောက်ပုံဆောက်နည်း က class ပေါ်မှာ မူတည်ပြီး ကွာသွားတယ်။ Code ကို ကြည့်ရအောင်။
HouseBuilder.java
abstract class HouseBuilder {
final void buildHouse() {
layFoundation();
buildWalls();
buildRoof();
installDoors();
}
abstract void layFoundation();
abstract void buildWalls();
abstract void buildRoof();
abstract void installDoors();
}
WoodenHouseBuilder.java
class WoodenHouseBuilder extends HouseBuilder {
void layFoundation() {
System.out.println("Laying wooden foundation");
}
void buildWalls() {
System.out.println("Building wooden walls");
}
void buildRoof() {
System.out.println("Building wooden roof");
}
void installDoors() {
System.out.println("Installing wooden doors");
}
}
BrickHouseBuilder.java
class BrickHouseBuilder extends HouseBuilder {
void layFoundation() {
System.out.println("Laying brick foundation");
}
void buildWalls() {
System.out.println("Building brick walls");
}
void buildRoof() {
System.out.println("Building brick roof");
}
void installDoors() {
System.out.println("Installing brick doors");
}
}
GlassHouseBuilder.java
class GlassHouseBuilder extends HouseBuilder {
void layFoundation() {
System.out.println("Laying glass foundation");
}
void buildWalls() {
System.out.println("Building glass walls");
}
void buildRoof() {
System.out.println("Building glass roof");
}
void installDoors() {
System.out.println("Installing glass doors");
}
}
Main.java
public class MainApplication {
public static void main(String[] args) {
HouseBuilder woodenHouseBuilder = new WoodenHouseBuilder();
woodenHouseBuilder.buildHouse();
}
}
WoodenHouseBuilder အတွက် sequence diagram ကို ကြည့်လိုက်ရင် ရှင်းလင်းသွားပါလိမ့်မယ်။
Pros and Cons
Step တူပြီး Implemention မတူသည့် အခါမှာ template pattern ကို အသုံးပြုနိုင်ပါတယ်။ Code တွေကို ပိုလိုရှင်းလင်း စေပါတယ်။ နောက်ပြီး algorithm တစ်ခုကနေ နောက်တစ်ခုကို ပြောင်းလဲ နိုင်ပါတယ်။
Superclass က code ကိုလည်း ပြန်ပြီး အသုံးပြုနိုင်ပါတယ်။
မကောင်းတာကတော့ Liskov Substitution Principle ကို ချိုးဖောက်နိုင်ပါတယ်။ တချို့ sub class တွေက မလိုသည့် အဆင့်တွေ ပါလာနိုင်ပါတယ်။
step တွေ များလာလေလေ maintain လုပ်ဖို့ ခက်လေလေပါပဲ။